home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / utils / cpboot.arc / CPBOOT.C next >
C/C++ Source or Header  |  1989-03-28  |  2KB  |  135 lines

  1. /*
  2.     cpboot.c        Copy Boot Sector
  3.  
  4.     881014    ACH
  5.  
  6. */
  7.  
  8. #include <osbind.h>
  9.  
  10. extern unsigned strlen();
  11.  
  12. #define SECTOR            512
  13. #define DELAY_FACTOR    3276
  14. #define SCREEN_WIDTH    80
  15. #define SCREEN_LENGTH    25
  16. #define CURSOR_UP        "\033A"
  17. #define CURSOR_DOWN        "\033B"
  18. #define CURSOR_RIGHT    "\033C"
  19. #define CURSOR_LEFT        "\033D"
  20. #define CURSOR_HOME        "\033H"
  21. #define CURSOR_POSITION "\033Y"
  22. #define CURSOR_OFFSET    32
  23. #define REVERSE_INDEX    "\033I"
  24. #define CLEAR_SCREEN    "\033E"
  25. #define CLEAR_EOP        "\033J"
  26. #define CLEAR_EOL        "\033K"
  27. #define LINE_INSERT        "\033L"
  28. #define LINE_DELETE        "\033M"
  29.  
  30.  
  31. typedef int void;
  32.  
  33. int ScreenWidth = SCREEN_WIDTH -1;
  34. int ScreenLength = SCREEN_LENGTH -1;
  35. char source[ SECTOR ];
  36. char target[ SECTOR ];
  37.  
  38.  
  39. void RowCol( row, col )
  40.     int row;
  41.     int col;
  42. {
  43.     Cconws( CURSOR_POSITION );
  44.     Cconout( row + CURSOR_OFFSET );
  45.     Cconout( col + CURSOR_OFFSET );
  46. } /* RowCol */
  47.  
  48.  
  49. void RowClear( row )
  50.     int row;
  51. {
  52.     RowCol( row, 0 );
  53.     Cconws( CLEAR_EOL );
  54. } /* RowClear */
  55.  
  56.  
  57. void Dclear()
  58. {
  59.     Cconws( CLEAR_SCREEN );
  60. } /* Dclear */
  61.  
  62.  
  63. void Scenter( row, str )
  64.     int row;
  65.     char* str;
  66. {
  67.     int x;
  68.  
  69.     x = strlen( str );
  70.     RowClear( row );
  71.     RowCol( row, ScreenWidth /2 - x /2 );
  72.     Cconws( str );
  73. } /* Scenter */
  74.  
  75.  
  76. void Wait()
  77. {
  78.     Scenter( ScreenLength, "[ press a key ]" );
  79.     while( !Cconis() );
  80.     Cconin();
  81.     RowClear( ScreenLength );
  82. } /* Wait */
  83.  
  84.  
  85. void Delay( x )
  86.     int x;
  87. {
  88.     for( x *= DELAY_FACTOR; x; --x );
  89. } /* Delay */
  90.  
  91.  
  92. void main()
  93. {
  94.     long serial;
  95.     short sides;
  96.     short tracks;
  97.  
  98.     Dclear();
  99.     Scenter( 8, "Copy Boot Sector" );    
  100.     Scenter( 9, "================" );
  101.  
  102.     Scenter( 12, "Insert SOURCE disk into A:." );
  103.     Wait();
  104.  
  105.     /* Read source sector. */
  106.     Scenter( 12, "Reading source boot sector." );
  107.     Floprd( source, 0L, 0, 1, 0, 0, 1 );
  108.     
  109.     Scenter( 12, "Insert TARGET disk into A:." );
  110.     Wait();
  111.  
  112.     /* Read target sector. */
  113.     Scenter( 12, "Reading target boot sector." );
  114.     Floprd( target, 0L, 0, 1, 0, 0, 1 );
  115.  
  116.     Scenter( 12, "Merging source sector with target sector." );
  117.     Delay( 10 );
  118.  
  119.     /* Copy branch and filler. */
  120.     memmove( target, source, 8L );
  121.     /* Copy boot code. */
  122.     memmove( &target[ 0x1e ], &source[ 0x1e ], 0x200L -0x1eL );
  123.     /* Prototype boot sector to readjust checksum. */
  124.     Protobt( target, -1L, -1, 1 );
  125.  
  126.     /* Update target boot sector. */
  127.     Scenter( 12, "Writing updated target boot sector." );
  128.     Flopwr( target, 0L, 0, 1, 0, 0, 1 );
  129.  
  130.     Scenter( 12, "Done." );
  131.     Wait();
  132. } /* main */
  133.  
  134.     
  135.